package _18_剑指OfferII;

import java.util.LinkedHashMap;
import java.util.Map;

public class _031_剑指OfferII最近最少使用缓存1 {

    // 内部实际是一个hash表，但是hash表元素被指针串起来，达到顺序访问的效果
    // accessOrder 默认值false。安装插入顺序，true安装访问顺序。这样就很有利的实现了LRU缓存
    // 如果accessOrder为false，默认为插入顺序
    // accessOrder如果为true的话，默认是安装访问顺序
    private LinkedHashMap<Integer, Integer> containers;


    public _031_剑指OfferII最近最少使用缓存1(int capacity) {
        // 设置为true，那么访问过的元素会被排在最后，而removeEldestEntr当前函数删除的是首元素
        this.containers = new LinkedHashMap<Integer, Integer>(capacity + 1, 0.75f, true) {
            @Override
            protected boolean removeEldestEntry(Map.Entry eldest) {
                return containers.size() > capacity;
            }
        };
    }

    public int get(int key) {
        return containers.getOrDefault(key, -1);
    }


    public void put(int key, int value) {
        containers.put(key, value);
    }



}
